package Principal;
import javax.swing.JOptionPane;

import GestorDeErrores.GestorErrores;
import Sintactico.SlkAction;
import Sintactico.SlkError;
import Sintactico.SlkLog;
import Sintactico.SlkParser;
import Sintactico.SlkToken;
import TablaDeSimbolos.TablaDeSimbolos;
import Lexico.Alexico2000Ultimate;

/**
 * Método main con nuestro léxico (para hacer pruebas)
 * @author Daniel
 *
 */
public class Main {
	// Método principal
	public static void main(String[] args) {
		GestorErrores gestor = new GestorErrores(); 
		TablaDeSimbolos ts = new TablaDeSimbolos();
		String fichero = JOptionPane.showInputDialog(null, "Introduce la ruta relativa del fichero a compilar", "Pruebas/prsint1.pas");
		if (fichero != null) {
			try {
				//Alexico scanner = new Alexico( new java.io.FileReader(fichero), ts);
				Alexico2000Ultimate scanner = new Alexico2000Ultimate(new java.io.FileReader(fichero), ts);
				System.out.println("Analizando fichero: " + System.getProperty("user.dir") +  "/" + fichero);
				// Analiza token a token el fichero
				
				short start = 0;
				SlkParser.parse(0, new SlkAction(), new SlkToken(), new SlkError(), new SlkLog(), start, scanner);//SlkParser.parse(0, action, tokens, error, log, SlkConstants.PROGRAM_, scanner);
				
//				for (Lexico.Token sym = scanner.siguiente_token(); !sym.m_tipo_token.equals("EOF"); sym = scanner.siguiente_token()) {
//					System.out.println("Token \"" + scanner.yytext() + "\"\t -> " + sym.m_tipo_token);
//					sym.toSlkToken();
//				}  

				//Muestra la lista de errores añadidos al gestor de errores tras el analizador léxico.
				gestor.muestraListaErrores();
			}
			catch (Exception e) {
				e.printStackTrace();
				if (fichero.length() > 0)
					System.err.println("Error en proceso E/S con el fichero " + 
							System.getProperty("user.dir") + "/" + fichero);
				else System.err.println("Error en proceso E/S con el fichero: no hay parámetro");


				// gestor.insertaError(new GestorDeErrores.TError(Errores.LEXICO_ERROR_DE_IO,-1,-1));
				//he metido -1 -1 porque este error no tiene ni fila ni columna.
			}
		}
	}
}